引入依赖,maven下载:
net.coobirdthumbnailator0.4.14支持:
图片缩放、图片压缩、区域裁剪、添加水印、图片旋转。
API1、Thumbnails.of(resource) 是一个重载方法,用String类型,表示图片原始路径,参数如下:
2、Thumbnails.of(resource).size(int width, int height) 缩放大小
规则一:当设定缩放的图片宽和高(102*150)都小于原来图片的宽和高(600*879),图片按比例缩小,最后缩完宽为102或高为150。
@Testvoid contextLoads() {try {Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg").size(160, 150).toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");} catch (IOException e) {System.out.println("e"+e);e.printStackTrace();}}原始图片:缩小完的图片:
规则二:当设定缩放的图片宽和高(1600*1500)都大于原来图片的宽和高(600*879),图片按比例放大,最后缩完宽为1600或高为1500
@Testvoid contextLoads() {try {Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg").size(1600, 1500).toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");} catch (IOException e) {System.out.println("e"+e);e.printStackTrace();}}原始图片: 缩放完的图片大小:
规则三:当设定缩放的图片宽和高(400*1500),原来图片的宽和高(600*879),宽比原来的小,高比原来的大,最后缩完 宽会缩小到400,图片比例保持不变。
@Testvoid contextLoads() {try {Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg").size(400, 1500).toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");} catch (IOException e) {System.out.println("e"+e);e.printStackTrace();}}原始图片: 缩放完的图片大小:
规则四:当设定缩放的图片宽和高(1500*400),原来图片的宽和高(600*879),宽比原来的大,高比原来的小,最后缩完 高会缩小到400,图片比例保持不变。
@Testvoid contextLoads() {try {Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg").size(1500, 400).toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");} catch (IOException e) {System.out.println("e"+e);e.printStackTrace();}}原始图片: 缩放完的图片大小:
3、 Thumbnails.of().size().toFile() 生成图片的路径,图片生成到哪里
重载的参数:
如果与原图图片路径及图片名一样,会覆盖原始图片!
4、Thumbnails.of().scale( double count ).toFile() 指定比例放大或缩小,参数小于1缩小;参数大于1放大。
@Testvoid contextLoads() {try {Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg").scale(2).toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");} catch (IOException e) {System.out.println("e"+e);e.printStackTrace();}}原始图片:缩完、放大后的图片
5、添加水印 watermark()
Thumbnails.of() .scale() .watermark(Position position, ImageIO.read(new File(String "图片水印的路径")), float opcity) .toFile()
该方法是一个重载方法:
参数一:Position 生成水印的位置,Position这个接口有对应的实现类,下边我使用的是Positions这个实现类;
参数二:水印的路径,需要返回一个 BufferedImage,使用 ImageIO.read(new File(String "图片水印的路径")) 会返回此类型;
参数三:透明度,float类型的,0 ~ 1。
@Testvoid contextLoads() {try {Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg").scale(1).watermark(Positions.TOP_CENTER, ImageIO.read(new File("C:\\Users\\Administrator\\Desktop\\6.jpg")), 0.7f).toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");} catch (IOException e) {System.out.println("e"+e);e.printStackTrace();}}6、rotate(double angle) 图片旋转,参数是旋转的角度。
@Testvoid contextLoads() {try {Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg").scale(1).rotate(90d).toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");} catch (IOException e) {System.out.println("e"+e);e.printStackTrace();}}旋转之后效果图:
7、sourceRegion(Position postion, int width, int height) 图片裁剪。
参数一:裁剪的位置;
参数二和参数三:图片的宽和高。
@Testvoid contextLoads() {try {Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg").scale(1).sourceRegion(Positions.CENTER, 400, 500).toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");} catch (IOException e) {System.out.println("e"+e);e.printStackTrace();}}裁剪完是红框的部分:
8、还有几个API 如下:
(1)keepAspectRatio(boolean arg) 图片是否按比例缩放,默认为true;
(2)outputQuality(float arg) / outputQuality(double arg) 图片质量;
区间从0.0 ~ 1.0
(3)outputFormat(String arg) 图片格式转换。
下边是源码中官方给出的案例: